package es.webapp.exiquets.filters;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;

import es.webapp.exiquets.domain.entities.User;
import es.webapp.exiquets.domain.entities.Usuariosanonimo;
import es.webapp.exiquets.domain.webforms.UsuarioWeb;
import es.webapp.exiquets.service.GestorUsuarios;
import es.webapp.exiquets.utils.eXiquetsConstants;

public class StoreUserInSessionFilter implements Filter{
	
	@Autowired
	GestorUsuarios gestorUsuarios;

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain arg2) throws IOException, ServletException {
		
		HttpServletRequest request = (HttpServletRequest) req;
		UsuarioWeb usuarioWeb = (UsuarioWeb) request.getSession().getAttribute(eXiquetsConstants.USER_SESION_KEY);
		
		if(usuarioWeb == null){
			usuarioWeb = new UsuarioWeb();
			Object user =  SecurityContextHolder.getContext().getAuthentication().getPrincipal();
			if("java.lang.String".equalsIgnoreCase(user.getClass().getName())){
			    Usuariosanonimo usuario = gestorUsuarios.getUsuarioPorSession(request.getSession().getId());
			    usuarioWeb.setTipoUsuario(eXiquetsConstants.USUARIO_TIPO_ANONIMO);
			    usuarioWeb.setUsuarioAnonimo(usuario);
			}else{
				User usuario = gestorUsuarios.getUsuarioPorMail(((org.springframework.security.core.userdetails.User) user).getUsername());
				usuarioWeb.setTipoUsuario(eXiquetsConstants.USUARIO_TPO_REGISTRADO);
				usuarioWeb.setUsuarioRegistrado(usuario);
			}
			
			request.getSession().setAttribute(eXiquetsConstants.USER_SESION_KEY, usuarioWeb);
		}
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}
